home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Floppyshop 2
/
Floppyshop - 2.zip
/
Floppyshop - 2.iso
/
art&graf.ix
/
art-0018
/
neo2mono
/
neo2mono.doc
< prev
next >
Wrap
Text File
|
1997-04-16
|
10KB
|
174 lines
0660103030566
9[....................................................]
üNEO2MONO
äEinProgrammzurKonvertierungvonNeochromeBildern
ÇHieristdasvonallenATARISTBesitzernlangerwarteteKon-
vertierungsprogramm.GehörenSieauchzudenen,diesichdie
PublicDomainDiskettenbesorgthaben,undnundievielen,schönen
Neochromebilderdiesichdarauffindennichtanschauenkönnen?
SeiensieunbesorgthieristdieLösung:DasProgramm
üNEO2MONOÇkonvertiertdieFarbbilderso,daßsieaufdem
Monochromemonitordargestelltwerdenkönnen.DieFarben
werdendabeidurchGrauwertesimuliert.UnddasGanzegehtin
Sekundenschnelle.Vergessensiealsoirgendwelcheseltsamen
BASICProgramme,diezwarauchkonvertierenkönnen,aberso,
daßmaninderZwischenzeitruhigmaleine(oderauchzwei)
TasseKaffeetrinkenkann.üNEO2MONOÇerledigteinBildin3.6
Sekunden--ohneLadenvonDiskette--undistdamit
gleichzeitigeinBeispieldafür,daßmaninCdie
kompliziertestenBitfummeleiensehreffizienterledigenkann.
BevorichdasProgrammkurzerkläreeinigeWortezurBedienung:
DasProgrammmußdieEndungTTP(TosTakesParameter)bekommen.
NachdemAnklickengibtesdannzweiMöglichkeiten:
1.mangibteinfachdenNameneinesNeochromebildesan.
DieseswirddanngeladenunddiekonvertierteVersion
aufdemBildschirmdargestellt.--Tretensieeinige
MeterzurückundbewundernsiedasErgebnis.
2.odersiegebenvordemDateinamennochü-wÇein.Dann
verschwindetdasBildnachBeendigungdesProgrammes
zwarwiebei1.)vomBildschirm,abergleichzeitigwird
eineKopiedavonaufDiskettegerettet(mitderEndung
monstattneo).DadurchhabensiedieMöglichkeitdas
BildspätermitirgendwelchenanderenProgrammenzu
laden(z.BinBASICmitbload)undzubearbeiten.
Alsoumesnocheinmalganzdeutlichzumachen:
neo2monoaafall.neo
konvertiertdenberühmtenNeochromeWasserfall(leiderohne
Bewegung)und
neo2mono-waafall.neo
erzeugtnachderKonvertierungeineDateiaafall.mondiemandann
weiterverarbeitenkann.
Umzuverstehen,wiedasGanzefunktioniertmußmanzuerst
einmalwissen,wiederATARIseinenBildschirmorganisierthat.
UnsinteressierennurzweiderdreiAuflösungsstufen.
DieAuflösungvon640*400,diees(bisjetzt)nurschwarz-
weißgibt,weilwirdasBildaufdieseAuflösungkonvertieren
müssenund320*200,weildieNeochromeBilderindieser
Auflösunggespeichertsind.
DiehoheAuflösungistsehreinfachangelegt.JedemBitim
BildspeicheristgenaueinPunkt(Pixel)aufdemBildschirm
zugeordnet.IstdasBitaufeinsgesetztwirdderPunktschwarz,
istesaufNull,weißangezeigt.
DashöchstwertigeBitimallererstenWort(1Wort=16Bit)
desBildspeichersistfürdenPunktganzlinksobeninderEcke
zuständig.Mankannsichnunleichtausrechnen,daßmangenau
640/16=40SpeicherwortefüreineBildschirmzeilebenötigt.Wenn
mandieseZahlmit400derAnzahlderZeilenmultipliziertkommt
mangenauaufdie16000Worte(oder32000Byte),dieder
Bildspeichergroßist.
BeiderniedrigenAuflösungistallesetwaskomplizierter.In
dieserAuflösungsstufehatman16FarbenzurVerfügungd.hfür
jedenBildpunktmußimBildspeichereinWertzwischen0und15
stehen,derdiejeweiligeFarbedesPunktesrepräsentiert.Um
ZahlenwerteindiesemBereichdarzustellenbenötigtman4Bit:
15á10Ç=1*2É3Ç+1*2É2Ç+1*2É1Ç+1=1111á2
Ç
DaderBildspeicherimmerdiegleicheGrößehatfolgtdaraus,daß
mandamitnurnoch1/4derhohenAuflösung,eben320*200Pixel
hat.Esbleibtjetztnochzuklären,wodiezueinemPunkt
gehörigenBitszufindensind.DieLösungsiehtsoaus:
ImmervieraufeinanderfolgendeWorteimBildspeicherergeben
16FarbpunkteaufdemBildschirmundzwarbildenimmerdievier
BitsmitdergleichenWertigkeitzusammengenommenden4-Bitwert
derbenötigtwird.FürdenPunktganzlinksobenbedeutetdas
also:MannehmedieerstenvierWorteimBildspeicher.Vonjedem
WortdashöchstwertigeBitundschreibedieseBitsnebeneinander.
DerWertdersichdannergibtentsprichtderFarbedes
Punktes.(AnmerkungfürProfis:Esergibtsichnatürlichnurder
IndexindieFarbpalette,dastuthierabernichtszurSache.Falls
Siedasnichtganzverstandenhabentröstensiesich,mirginges
anfänglichgenauso.BetrachtensiesicheinfacheinmalBild_1dann
wirdihnenallesklarwerden.
EineähnlichRechnungwieobenergibtnun,daßmanbei320Punkten
a4Bit=1280Bit=1280/16=80WorteproBildzeilebenötigt.
DieIdeeistnunjedesFarbpixeldurcheinenGrauwertanzunähern.
SiewerdenjetztzuRechtfragenwoherichdennGrauwertenehmen
will,wiejaallgemeinbekanntistbietetderMonochromemonitor,
wieseinNameschonsagtnurweißestesWeißoderschwärzestes
Schwarzunddazwischenistnichts.
HierkommtnuneineMethodezumZuge,dieschonindenersten
AnfängenderComputergraphikbeliebtundbekanntwar.DerTrick
ist:AuseinerangemessenenEntfernungbetrachtetverschwimmen
mehrerePixelzueinemFleckderumsodunklerwird,jehöher
diePixelkonzentrationwird.Mannehmealsoz.B.eine2*2Matrix
undfüllesienachundnachmitPixelnanundschonhatmanfünf
GrauwertstufenzurVerfügung.Bild_2zeigtwieichdieVerteilung
fürüNEO2MONOÇgewählthabe.DievierBitFarbinformationwerden
alsoaufvierPixelininderGrauwertmatrixabgebildet.
JetzthabensieallesanGrundlagenzusammenumdas
Konvertierungsprogrammverstehenzukönnen.
DasProgrammzerfälltindreiHauptbestandteile:
EinlesendesFarbildesauseinerNeochromedatei,Konvertierendes
BildesdirektaufdenBildschirmundfallsgewünschtAbspeichern
deskonvertiertenBildesaufDiskette.
ZumEinlesenundAbspeichernistnichtvielzusagen.Es
werdennichtdieCStandardroutinenbenutzt,dadieseim
Allgemeinenzulangsamsind,sonderndirektdieSchnittstellendie
dasATARITOSanbietet.EinBildkanndadurchvonderRAM-Diskin
wenigerals2Sekundengeladenwerden.BeimLadendesBildeswird
zuersteinVorspannvon128Byteüberlesen.Dieserenthältglobale
InformationzumBild,wiezumBeispieldieFarbpalette.Ich
benutzedieseInformationenallerdingsnichtinmeinemProgramm.
AndieserStelleergebensichnochVerbesserungsmöglichkeiten,
denensiegerneeinmalnachgehenkönnen.
DasFarbbildwirdineinenintegerArraynamensübuffÇgeladen
undvondortausweiterverarbeitet.EineandereMöglichkeitwäre
esdasBild"insitu"alsodirektimBildschirmspeicherzu
konvertieren.BeidieserMethodemüßteallerdingsjedesBitdes
konvertiertenBildesseperatgesetztundgelöschtwerden,während
meineMethodedassimultaneVerarbeitenvonjeweilszwei
nebeneinanderliegendenBitserlaubt--darausfolgtzusammenmit
einigenanderenDingenmehralsdoppelteGeschwindigkeit.Außerdem
istderAtarieinRechner,beidemmannunjawirklichnichtmit
Speicherzugeizenbraucht.
DieeigentlicheKonvertierungerfolgtinderFunktion
üconvert()Çinnerhalbderdreiverschachteltenfor-Schleifen.Die
SchleifemitdemIndexüyÇläuftüberdieZeilendesFarbbilds,
gleichzeitigwerdendiezweilongPointerüptr1Çundüptr2
Çhochgzählt.SiezeigenjeweilsaufdenAnfangderzwei
Grauwertzeilen,diesichausderKonvertierungeinerFarbzeile
ergeben.Bild_3zeigt,wiedererstePunkteinerFarbzeile
konvertiertwird.DieSchleifeSchleifemitdemIndexüxÇläuftnun
jeweilsinnerhalbeinerFarbzeileinSprüngenvon4Worten.Wie
wirobenschonfestgestellthabenergenvieraufeinanderfolgende
Speicherworte16aufeinanderfolgendePixelimFarbbild.Diese16
PixelwerdeninderinnerstenSchleifemitdemIndexübitÇ
errechnet.DieFunktionütest()ÇliefertzujedemPunktden
Farbwert.AbhängigvondiesemFarbwertwerdennunjeweilszwei
BitsindenlongVariablenül1Çundül2Çgesetzt.Daauseinem
FarbpunktzweinebeneinanderliegendeBitsinül1Çbzwül2Çwerden
fülltdieübit-ÇSchleifegeradediezweiVariablen,sodaßdiese
nachVerlassenderSchleifeandieStellendesBildspeichers
geschriebenwerdenkönnen,aufdieüptrÇbzwüptr2Çzeigen.
DasistschondieganzeKonvertierung.WerdieErklärungbeim
erstenDurchlesenschonverstandenhatkannsichgratulieren
DieKonvertierungistübrigensnichtbijektiv,dasheißtsie
läßtsichnichtumkehren.UmeineeindeutigeAbbildungzuerhalten
müßtemanjedender16Farbwerteineinesvon16Graumustern
verwandeln.Dasbedeutetstatteiner2*2Matrixmußmaneine4*
4MatrixmitPixelnfüllen.UmdasganzeBildsoaufden
Monochromemonitorbringenzukönnenmüßtedieserallerdingseine
Auflösungvon1380*800Punktenhaben.
WerkeinenC-CompilerhatoderzufaulistdasProgramm
abzutippenkanndielauffähigeVersionzusammenmitden
NeochromebildernaufderPublicDomainDiskettebestellen.
Bild_4zeigteinmitüNEO2MONOÇkonvertiertesBild.